﻿using System;
using System.Linq;
using System.Collections.Generic;
using System.Text;
using SeizyUtils.Common.Data;
using System.Reflection;

namespace SeizyUtils.AppCode.Common.Data.Model
{
    public class ClonableBean : IBean
    {
        /// <summary>
        /// インスタンスのクローンを生成します。
        /// DataBinderによりデータをコピーする際に利用されます。
        /// </summary>
        /// <returns></returns>
        public object Clone()
        {
            return MemberwiseClone();
        }


        public void copy(IBean bean)
        {
            Type type = GetType();
            if (type != bean.GetType())
            {
                throw new ApplicationException("コピー対象のインスタンスが異なります。");
            }

            foreach (PropertyInfo info in type.GetProperties())
            {
                Object value = info.GetGetMethod().Invoke(bean, null);
                info.GetSetMethod().Invoke(this, new object[]{ value });
            }

        }

    }
}
